#pragma once
#include "Modelo/CurvaBessier.h"
#include "glutWindow.h"
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "Modelo/CurvaSpline.h"
#include <vector>
#include "CargadorDeTextures.h"
#include "Modelo/Cangrejo/Cangrejo.h"
#include "Modelo/Dibujable.h"
#include "Modelo/Piso.h"
#include "Modelo/Camara.h"
#include "Modelo/Pez/Pez.h"
//#include "Modelo/Formas/Planta.h"
//#include "Modelo/Formas/EsferaDeformada.h"
#include "Modelo/Alga.h"
#include "Modelo/Piedra.h"
#include "Modelo/Superficie.h"
//#include "Modelo/Formas/FormaPiedra.h"
#include "Modelo/Formas/FormaAleta.h"
#include "Modelo/Hoyo.h"
#include "ShaderFactory.h"
#include "Modelo/Formas/FormaHoyos.h"
class myWindow : public cwc::glutWindow
{
public:
	bool mover ;
	FormaHoyos* far;
	FormaHoyos* fab;
	ShaderFactory* sF;
	Superficie* techo;
	CargadorDeTextures* cargador;
	Superficie* suelo2;
//	FormaHoyos* forma;
	Hoyo* hoyoPiedra1;
	Hoyo* hoyo1;
	Hoyo* hoyo2;
	Hoyo* hoyo3;
	Hoyo* hoyo4;
	Hoyo* hoyo5;
	Hoyo* hoyo6;
	Piedra* piedra6;
	Piedra* piedra5;
	Alga* alga5;
	Alga* alga4;
	Cangrejo* cang4;
	Pez* pez3;
	FormaAleta* aleta;
	Piedra* piedra4;
	Pez* pez2;
	Piedra* piedra1;
	Piedra* piedra2;
	Piedra* piedra3;
	Alga* alga3;
	Alga* alga1;
	Alga* alga2;
	Cangrejo* cang3;
	Superficie* suelo;
	Pez* pez1;
	Cangrejo* cang;
	Cangrejo* cang2;

	//// a eliminar ////

	myWindow();
	virtual void OnRender(void);
	virtual void OnIdle();

	// When OnInit is called, a render context (in this case GLUT-Window)
	// is already available!
	virtual void OnInit();

	virtual void OnResize(int w, int h);
	virtual void OnClose(void);
	virtual void OnMouseDown(int button, int x, int y);
	virtual void OnMouseUp(int button, int x, int y);
	virtual void OnMouseWheel(int nWheelNumber, int nDirection, int x, int y);
	//! Called while Left Mouse button is pressed.
	virtual void OnLeftMouseDrag(int x, int y);

	virtual void OnKeyDown(int nKey, char cAscii);

	virtual void OnKeyUp(int nKey, char cAscii);
private:
	Camara* camara;

    // Dibujables
    std::vector<Dibujable*> listaRenders;
    Esfera* cuerpoCangrejo;
    void changeObjectColor(int handle,float r, float g, float b);
    GLuint programHandle;
    GLuint vertShader;
    GLuint fragShader;

    //Draggin variables
    bool cameraDragging;
    int dx;
    int dy;
};
